home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 3006 / 3006.xpi / chrome / dwhelper.jar / content / mp3tunes / mp3tunes-proc-helper.js < prev    next >
Text File  |  2010-01-15  |  13KB  |  357 lines

  1. /******************************************************************************
  2.  *            Copyright (c) 2006 Michel Gutierrez. All Rights Reserved.
  3.  ******************************************************************************/
  4.  
  5. /**
  6. * Object constructor
  7. */
  8. function MTProcHelper(mobile) {
  9.     try {
  10.         this.mobile=mobile;
  11.         this.freeLimit=3;
  12.         //dump("[MTProcHelper] constructor\n");
  13.         var prefService=Components.classes["@mozilla.org/preferences-service;1"]
  14.                                            .getService(Components.interfaces.nsIPrefService);
  15.         this.pref=prefService.getBranch("dwhelper.mp3tunes.");
  16.         this.dlMgr=Components.classes["@downloadhelper.net/download-manager;1"]
  17.                                         .getService(Components.interfaces.dhIDownloadMgr);
  18.         this.cvMgr=Components.classes["@downloadhelper.net/convert-manager-component"]
  19.                                           .getService(Components.interfaces.dhIConvertMgr);
  20.         this.mtMgr=Components.classes["@downloadhelper.net/mp3tunes-manager;1"]
  21.                                            .getService(Components.interfaces.dhIMP3Tunes);
  22.     } catch(e) {
  23.         dump("[MTProcHelper] !!! constructor: "+e+"\n");
  24.     }
  25. }
  26.  
  27. MTProcHelper.prototype = {
  28.     get enabled() { return this.pref.getBoolPref("enabled"); }
  29. }
  30.  
  31. MTProcHelper.prototype.canHandle=function(desc) {
  32.     //dump("[MTProcHelper] canHandle()\n");
  33.     if(desc.has("media-url"))
  34.         return true;
  35.     else
  36.         return false;
  37. }
  38.  
  39. MTProcHelper.prototype.requireDownload=function(desc) {
  40.     //dump("[MTProcHelper] requireDownload()\n");
  41.     //return desc.has("media-url");
  42.     return false;
  43. }
  44.  
  45. MTProcHelper.prototype.preDownload=function(desc,sendToMobile) {
  46.      return true;
  47. }
  48.  
  49. MTProcHelper.prototype.handle=function(desc,promptDownload) {
  50.     //dump("[MTProcHelper] handle()\n");
  51.     
  52.     var browserCompatible=false;
  53.     
  54.     try {
  55.         var browserVersion=Components.classes["@mozilla.org/xre/app-info;1"]
  56.                                                .getService(Components.interfaces.nsIXULAppInfo).platformVersion;
  57.         var comparator=Components.classes["@mozilla.org/xpcom/version-comparator;1"]
  58.                                           .getService(Components.interfaces.nsIVersionComparator);
  59.         if(comparator.compare(browserVersion,"1.9")>=0)
  60.             browserCompatible=true;
  61.     } catch(e) {}
  62.     
  63.     if(!browserCompatible) {
  64.         Util.alertError(Util.getText("mp3tunes.error.browser-incompatible"));
  65.         return;
  66.     }
  67.     
  68.     try {
  69.         
  70.         var skipConversion=false;
  71.         var extension="";
  72.         try {
  73.             extension=/\.([^\.]{1,5})$/.exec(Util.getPropsString(desc,"file-name"))[1];
  74.         } catch(e) {}
  75.  
  76.         if(["mp3","aac","wav"].indexOf(extension)>=0) {
  77.             skipConversion=true;
  78.         } else if(["flv","mp4","mpeg","mpeg4","avi","wmv"].indexOf(extension)>=0 && this.pref.getBoolPref("allow-video-upload")) {
  79.             
  80.             var onSend=this.pref.getCharPref("upload."+(this.mobile?"mobile":"locker"));
  81.  
  82.             switch(onSend) {
  83.                 case "video":
  84.                     skipConversion=true;
  85.                     break;
  86.                 case "ask":
  87.                     var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  88.                                                 .getService(Components.interfaces.nsIWindowMediator);
  89.                     var window = wm.getMostRecentWindow("navigator:browser");
  90.                     var options="chrome,centerscreen,toolbar,modal";
  91.                     var data={ target: this.mobile?"mobile":"locker" }
  92.                     window.openDialog("chrome://dwhelper/content/mp3tunes/conversion-choice.xul",'',options, data );
  93.                     if(data.choice==null)
  94.                         return;
  95.                     if(data.choice=="video")
  96.                         skipConversion=true;
  97.             }
  98.         } 
  99.         
  100.         if(skipConversion==false) {
  101.             if(!this.cvMgr.checkConverter(false)) {
  102.                 if(this.pref.getBoolPref("show-no-converter-warning")==true) {
  103.                     var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  104.                                                 .getService(Components.interfaces.nsIWindowMediator);
  105.                     var window = wm.getMostRecentWindow("navigator:browser");
  106.                     var options="chrome,centerscreen,toolbar,modal";
  107.  
  108.                     var data={};
  109.                     window.openDialog("chrome://dwhelper/content/mp3tunes/warn-no-converter.xul",'',options, data );
  110.                     if(data.result==0)
  111.                         return;
  112.                     else if(data.result==1)
  113.                         skipConversion=true;
  114.                     else if(data.result==2) {
  115.                         var options="chrome,centerscreen,toolbar,modal";
  116.                         var data={ selectedPanel: "panel-conversion" }
  117.                         window.openDialog("chrome://dwhelper/content/preferences-new.xul",'',options, data );
  118.                     }
  119.                 }
  120.             }
  121.         }
  122.  
  123.         if(skipConversion==false) {
  124.             if(!this.cvMgr.checkConverter(true)) {
  125.                 return;
  126.             }
  127.         }
  128.  
  129.         var sSkipConversion=Components.classes["@mozilla.org/supports-PRBool;1"].createInstance(Components.interfaces.nsISupportsPRBool);
  130.         sSkipConversion.data=skipConversion;
  131.         desc.set("mp3tunes-skip-conversion",sSkipConversion);
  132.         
  133.         function AccountStatusObserver(client,entry) {
  134.             this.client=client;
  135.             this.entry=entry;
  136.         }
  137.         AccountStatusObserver.prototype={
  138.             observe: function(subject,topic,data) {
  139.                 if(topic=="mp3tunes-account-status") {
  140.                     var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  141.                                                 .getService(Components.interfaces.nsIWindowMediator);
  142.                     var window = wm.getMostRecentWindow("navigator:browser");
  143.                     window.setTimeout(function(_this) {
  144.                         _this.client.authResult(_this.entry,data);
  145.                     },0,this,data);
  146.                 }
  147.             }
  148.         }
  149.         var user=this.pref.getCharPref("username");
  150.         while(user.length==0) {
  151.             var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  152.                                         .getService(Components.interfaces.nsIWindowMediator);
  153.             var window = wm.getMostRecentWindow("navigator:browser");
  154.             if(window.confirm(Util.getText("mp3tunes.confirm.configure-account"))==false)
  155.                 return;
  156.             this.openPreferences();
  157.             user=this.pref.getCharPref("username");
  158.         }
  159.         var password=Util.getPassword("mp3tunes");
  160.         if(password==null) // no password set, just let server reports the error
  161.             password=""; 
  162.         this.mtMgr.accountStatus(user,password,new AccountStatusObserver(this,desc));
  163.     } catch(e) {
  164.         dump("!!! [QMTProcHelper] handle(): "+e+"\n");
  165.     }
  166. }
  167.  
  168. MTProcHelper.prototype.openPreferences=function() {
  169.     var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  170.                                 .getService(Components.interfaces.nsIWindowMediator);
  171.     var window = wm.getMostRecentWindow("navigator:browser");
  172.     var options="chrome,centerscreen,toolbar,modal";
  173.     var data={ selectedPanel: "panel-services", selectedTab: "tab-mp3tunes" }
  174.     window.openDialog("chrome://dwhelper/content/preferences-new.xul",'',options, data );    
  175. }
  176.  
  177. MTProcHelper.prototype.authResult=function(entry,status,message) {
  178.     var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  179.                                 .getService(Components.interfaces.nsIWindowMediator);
  180.     var window = wm.getMostRecentWindow("navigator:browser");
  181.     if(status=="free") {
  182.         var today=new Date();
  183.         var date=""+today.getDate()+"-"+(today.getMonth()+1)+"-"+today.getFullYear();
  184.         var freeLimit="0;"+date;
  185.         try {
  186.             freeLimit=this.pref.getCharPref("free-limit");
  187.         } catch(e) {}
  188.         var parts=freeLimit.split(";");
  189.         var count=parseInt(parts[0]);
  190.         if(date==parts[1] && count>=this.freeLimit) {
  191.             var rc=window.confirm(Util.getFText("mp3tunes.notification.limit-reached",[""+this.freeLimit],1));
  192.             if(rc)
  193.                 window.open("http://www.downloadhelper.net/mp3tunes-upgrade.php");
  194.             return;
  195.         }
  196.         this.download(entry,null);        
  197.     } else if(status=="premium") {
  198.         this.download(entry,null);        
  199.     } else {
  200.         Util.alertError(Util.getFText("mp3tunes.error.failed-auth",[status],1));
  201.         this.openPreferences();
  202.     }
  203. }
  204.  
  205. MTProcHelper.prototype.download=function(entry,ctx) {
  206.     var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  207.                                 .getService(Components.interfaces.nsIWindowMediator);
  208.     var window = wm.getMostRecentWindow("navigator:browser");
  209.     if(this.mobile) {
  210.         var phonenumber=this.pref.getCharPref("phonenumber");
  211.         while(phonenumber.length==0) {
  212.             if(!window.confirm(Util.getText("mp3tunes.confirm.no-phonenumber")))
  213.                 return;
  214.             this.openPreferences();
  215.             phonenumber=this.pref.getCharPref("phonenumber");
  216.         }
  217.     }
  218.     var options="chrome,centerscreen,toolbar,modal";
  219.     var data={ entry: entry }
  220.     window.openDialog("chrome://dwhelper/content/mp3tunes/title.xul",'',options, data );
  221.     if(!data.ok)
  222.         return;
  223.  
  224.     this.dlMgr.download(this,entry,ctx);
  225. }
  226.  
  227. MTProcHelper.prototype.downloadFinished=function(status, request, entry, ctx) {
  228.     //dump("[MTProcHelper] downloadFinished()\n");
  229.     if(status==0) {
  230.         if(entry.get("mp3tunes-skip-conversion",Components.interfaces.nsISupportsPRBool).data) {
  231.             var file=entry.get("dl-file",Components.interfaces.nsILocalFile);
  232.             this.mtMgr.uploadFile(file,entry,new UploadFileObserver(this,entry));
  233.         } else {
  234.              var file=Components.classes["@mozilla.org/file/directory_service;1"]
  235.                                          .getService(Components.interfaces.nsIProperties)
  236.                                          .get("TmpD", Components.interfaces.nsIFile);
  237.              file.append("mp3tunes.mp3");
  238.              file.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
  239.              entry.set("cv-file",file);
  240.             var format="mp3/-ab 128k -f mp3";
  241.             this.cvMgr.addConvert(entry.get("dl-file",Components.interfaces.nsILocalFile),file,format,true,this,entry,ctx);
  242.         }
  243.     }
  244. }
  245.  
  246. MTProcHelper.prototype.conversionFinished=function(status, entry, ctx) {
  247.     //dump("[MTProcHelper] conversionFinished("+status+",...)\n");
  248.     var file=entry.get("cv-file",Components.interfaces.nsILocalFile);
  249.     this.mtMgr.uploadFile(file,entry,new UploadFileObserver(this,entry));
  250. }
  251.  
  252. MTProcHelper.prototype.notification=function(message,entry) {
  253.     try {
  254.         var alertsService = Components.classes["@mozilla.org/alerts-service;1"]
  255.                                                .getService(Components.interfaces.nsIAlertsService);
  256.         var title=Util.getText("mp3tunes.notification.upload.title");
  257.         var iconUrl="http://www.downloadhelper.net/mp3tunes-logo.php?type=";
  258.         if(this.mobile)
  259.             iconUrl+="mobile";
  260.         else
  261.             iconUrl+="locker";
  262.         iconUrl+="&converted=";
  263.         if(entry.get("mp3tunes-skip-conversion",Components.interfaces.nsISupportsPRBool).data)
  264.             iconUrl+="0";
  265.         else
  266.             iconUrl+="1";
  267.         alertsService.showAlertNotification(iconUrl,title,message);
  268.     } catch(e) {}
  269. }
  270.  
  271. MTProcHelper.prototype.uploadFinished=function(status, entry, message) {
  272.     //dump("[MTProcHelper] uploadFinished("+status+",...)\n");
  273.     try {
  274.         if(entry.get("mp3tunes-skip-conversion",Components.interfaces.nsISupportsPRBool).data) {
  275.             entry.get("dl-file",Components.interfaces.nsILocalFile).remove(false);
  276.         } else {
  277.             entry.get("cv-file",Components.interfaces.nsILocalFile).remove(false);
  278.         }
  279.     } catch(e) {}
  280.     if(status) {
  281.         if(!this.mobile)
  282.             this.notification(Util.getText("mp3tunes.notification.upload.succeeded"),entry);
  283.         this.countUploads(this.entry);
  284.     } else {
  285.         Util.alertError(Util.getFText("mp3tunes.notification.upload.failed",[message],1));
  286.     }
  287.     if(this.mobile) {
  288.         this.sendToPhone(entry);
  289.     }
  290. }
  291.  
  292. MTProcHelper.prototype.sendToPhone=function(entry) {
  293.     //dump("[MTProcHelper] sendToPhone()\n");
  294.     function SendToPhoneObserver(client,entry,phonenumber) {
  295.         this.client=client;
  296.         this.entry=entry;
  297.         this.phonenumber=phonenumber;
  298.     }
  299.     SendToPhoneObserver.prototype={
  300.         observe: function(subject,topic,data) {
  301.             if(topic=="mp3tunes-send-to-phone-succeeded") {
  302.                 //dump("[MTProcHelper] sendToPhone(): succeeded\n");
  303.                 this.client.notification(Util.getFText("mp3tunes.notification.send-to-phone.succeeded",[phonenumber],1),this.entry);
  304.             }
  305.             if(topic=="mp3tunes-send-to-phone-failed") {
  306.                 Util.alertError(Util.getFText("mp3tunes.notification.send-to-phone.failed",[data],1));
  307.             }
  308.         }
  309.     }
  310.     var key=Util.getPropsString(entry,"cv-md5");
  311.     var phonenumber=this.pref.getCharPref("phonenumber");
  312.     this.mtMgr.sendToPhone(key,phonenumber,new SendToPhoneObserver(this,entry,phonenumber));
  313. }
  314.  
  315. MTProcHelper.prototype.countUploads=function(entry) {
  316.     var today=new Date();
  317.     var date=""+today.getDate()+"-"+(today.getMonth()+1)+"-"+today.getFullYear();
  318.     var freeLimit="0;"+date;
  319.     try {
  320.         freeLimit=this.pref.getCharPref("free-limit");
  321.     } catch(e) {}
  322.     var parts=freeLimit.split(";");
  323.     var count=parseInt(parts[0]);
  324.     if(date!=parts[1]) 
  325.         count=0;
  326.     count++;
  327.     this.pref.setCharPref("free-limit",""+count+";"+date);
  328. }
  329.  
  330. MTProcHelper.prototype.QueryInterface = function(iid) {
  331.     if(
  332.         iid.equals(Components.interfaces.dhIConversionListener)==false &&
  333.         iid.equals(Components.interfaces.dhIDownloadListener)==false &&
  334.         iid.equals(Components.interfaces.nsISupports)==false
  335.     ) {
  336.             throw Components.results.NS_ERROR_NO_INTERFACE;
  337.         }
  338.     return this;
  339. }
  340.  
  341. function UploadFileObserver(client,entry) {
  342.     this.client=client;
  343.     this.entry=entry;
  344. }
  345.  
  346. UploadFileObserver.prototype={
  347.     observe: function(subject,topic,data) {
  348.         if(topic=="mp3tunes-upload-file-succeeded") {
  349.             this.client.uploadFinished(true,this.entry,null);
  350.         }
  351.         if(topic=="mp3tunes-upload-file-failed") {
  352.             this.client.uploadFinished(false,this.entry,data);
  353.         }
  354.     }
  355. }
  356.  
  357.